package cn.csc.module.product.api.stocklock;

import cn.csc.framework.common.pojo.CommonResult;
import cn.csc.module.product.api.sku.dto.SkuDTO;
import cn.csc.module.product.api.stocklock.dto.SkuStockDTO;
import cn.csc.module.product.api.stocklock.dto.SkuStockRespDTO;
import cn.csc.module.product.api.stocklock.dto.SkuStockLockReqDTO;
import cn.csc.module.product.enums.ApiConstants;
import io.swagger.annotations.Api;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigInteger;
import java.util.List;

/**
 * 锁定库存
 * @author liuchuang
 * @version 1.0
 * @date 2024/1/25 12:43
 * @modify
 */
@FeignClient(name = ApiConstants.NAME) // TODO fallbackFactory =
@Api(tags = "RPC 服务 - 锁定库存")
public interface SkuStockLockApi {

    String PREFIX = ApiConstants.PREFIX + "/sku-stock";

    /**
     * 锁定库存
     * @param skuStockLocks 参数
     * @return 是否成功
     */
    @PostMapping(value = PREFIX + "/lock")
    CommonResult<Void> lock(@RequestBody List<SkuStockLockReqDTO> skuStockLocks);

    /**
     * 减少库存
     * @param skuStockLocks 参数
     * @return 是否成功
     */
    @PostMapping(value = PREFIX + "/decrestock")
    CommonResult<Void> decreStock(@RequestBody List<SkuStockLockReqDTO> skuStockLocks);

    /**
     * 通过sku编号列表查询库存
     *
     * @param skuIds sku编号列表
     * @return sku详情列表
     */
    @GetMapping(value = PREFIX + "/getSkuStockList")
    CommonResult<List<SkuStockDTO>> getSkuStockList(@RequestParam("skuIds") List<BigInteger> skuIds);

}
